package main

import "time"
import "fmt"

//有时候会出现goroutine阻塞的情况，进一步导致程序死锁，出现deadlock panic
//可以利用select来设置超时，避免出现死锁
func main() {
	ch1 := make(chan int)
	ch2 := make(chan bool)
	go func() {
		for {
			select {
			case v := <-ch1: //从ch1读取值，由于没有其他goroutine写入ch1，此分支不会执行
				fmt.Println(v)
			case <-time.After(5 * time.Second): //阻塞超过5秒执行此分支
				fmt.Println("timeout")
				ch2 <- true
				break
			}
		}
	}()
	fmt.Println(<-ch2)
}
